package ljl.alg.wangzheng_camp.round1.veryveryeasy;

public class _125_is_palindrome {
    
    /**
     * 捣鼓半天，很慢啊
     * */
    public boolean isPalindrome2(String s) {
        s = s.replaceAll("[^\\da-zA-Z]", "").toLowerCase();
        if (s.length() == 0) return true;
        int i = 0, j = s.length() - 1;
        while (i < j) {
            if (s.charAt(i) != s.charAt(j)) return false;
            i++; j--;
        }
        return true;
    }
    
    /**
     * 试试双指针吧那就
     *
     * 我写的这个大差不差吧
     * 还行我感觉，
     *
     * 看官方文档学了个 Character.isLetterOrDigit() 这个比较好
     *
     * */
    public boolean isPalindrome(String s) {
        if (s.length() == 0) return true;
        int i = 0, j = s.length() - 1;
        while (i < j) {
            while (i < j && !ready(s, j)) j--;
            while (i < j && !ready(s, i)) i++;
            if (i >= j) break;
            if ((s.charAt(i) | 32) != (s.charAt(j) | 32)) return false;
            i++; j--;
        }
        return true;
    }
    static boolean ready(String s, int i) {
        char c = s.charAt(i);
        return c >= '0' && c <= '9' || c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';
    }
    
}
